<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    /*
先求nums之和sum，如果sum小于x，则说明全部删除也不能使x归零，直接返回-1；
sum代表将右侧所有数字全部移除，左侧不移除，则可推导初始指针left=-1，right=0；
left从-1开始，依次移动到终点；过程中，如果sum<x，则不需移动right，继续移动left，
使sum增大；如果sum>x，right右移，使sum减小；直至right越界或sum>=x；
如果sum === x，则操作数 = left + 1 + nums.length - right;
  */
    var minOperations = function (nums, x) {
      let sum = nums.reduce((sum, item) => sum + item, 0);
      if (sum < x) { // 和小于x，直接return -1
        return -1;
      }
      let left = -1;
      let right = 0;
      let ans = Infinity;
      for (left; left < nums.length; left++) {
        if (left !== -1) {
          sum += nums[left]; // sum增大
        }
        if (sum < x) { // sum过小，需右移left，使其增大
          continue;
        }
        // sum过大，需右移right，使其减小，直至越界或不大于x
        while (right < nums.length && sum > x) {
          sum -= nums[right];
          right++;
        }
        // 满足条件
        if (sum === x) {
          ans = Math.min(ans, left + 1 + nums.length - right);
        }
      }
      return isFinite(ans) ? ans : -1;
    };
    console.log(minOperations(nums = [5, 6, 7, 8, 9], x = 4))
  </script>
</body>

</html>